/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef __SYNCHRONNIZER_H__
#define __SYNCHRONNIZER_H__
#include "core/module.h"
#include "core/sockness.h"
#include "core/context.h"

namespace mod {
	class SyncModule final : public Module {
	public:
		// 头文件中只声明不初始化（除了必须就地初始化的）
		explicit SyncModule(std::shared_ptr<Context> ctx, const std::string &module_name);
		SyncModule(const SyncModule &)            = delete; // 禁止拷贝构造
		SyncModule &operator=(const SyncModule &) = delete; // 禁止拷贝赋值
		SyncModule(SyncModule &&)                 = delete; // 禁止移动构造
		SyncModule &operator=(SyncModule &&)      = delete; // 禁止移动赋值
		~SyncModule() override;                             // 显式释放资源

		bool Init() override;
		void Start() override;
		void Stop() override;

	private:
		int               sockfd = -1;          // 同步通信的套接字描述符（-1表示无效）
		std::thread       thread_sync;          // 同步处理线程（负责执行sync_handler）
		std::atomic<bool> running;              // 线程运行状态标记
		void              sync_handler() const; // 同步程序
	}; // class SyncModule
} // namespace mod
#endif // __SYNCHRONNIZER_H__
